/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	comm_stack.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-07-19
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _TEMPLATE_LIST_H_
#define _TEMPLATE_LIST_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stm32h7xx.h"
#include "stm32h7xx_hal.h"
#include <rtthread.h>
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/
typedef enum{
	LIST_ERR_NONE,	
	LIST_ERR_CREAT,
	LIST_ERR_PUSH,
	LIST_ERR_POP,
	LIST_ERR_FREE,
	LIST_ERR_CLEAR,
}list_err_t;

typedef enum{
	LIST_FIFO,
	LIST_FILO,
}list_io_type;

typedef struct TEMPLATE_NODE{
	struct	TEMPLATE_NODE* next;
}list_node_t;

typedef struct TEMPLATE_LIST{
	/*private*/
	uint16_t	cur_size;
	struct rt_mempool*	rt_mp;
	list_io_type 	type;
	uint16_t			max_size;
	list_node_t*	head;
	list_node_t*	tail;
}list_t;
/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/

list_err_t list_create(list_t* p_list, uint16_t max_size ,list_io_type type, void* p_mem);

void* list_new(list_t* p_list);

list_err_t list_push(list_t* p_list, void* p_node);

void* list_pop(list_t* p_list);
/*释放节点内存 在pop之后用*/
list_err_t list_free(list_t* p_list, list_node_t* p_node);
/*删除一个链表中的节点*/
list_err_t list_remove(list_t* p_list, list_node_t* p_node);

list_err_t list_clear(list_t* p_list);

//void* ccp_find_pack(list_t* p_list, void* p_frame);
#endif
